package Test;

import static org.junit.Assert.*;

import org.junit.Test;

import system.Input;
import system.Maquina;
import system.Output;
import system.Robot;
import system.Sistema;

public class TestTrayectorias {  //tests de sistema

	@Test
	public void testTrayectoria1() {
		
		Sistema s = new Sistema();
		Robot r = new Robot(null, s,null);
		Input i1 = new Input(null, s);
		Maquina m1 = new Maquina(null, s);
		Maquina m2 = new Maquina(null, s);
		Output o1 = new Output(null, s);
		
		r.mover(i1, m1);
		r.mover(m1, m2);
		r.mover(m2, o1);
		
		assertEquals("La maquina m1 se quedo con una o mas piezas", 0 , m1.getCantPiezas());
		assertEquals("La maquina m2 se quedo con una o mas piezas", 0 , m2.getCantPiezas());
		assertEquals("el output 1 tiene la misma cantidad de piezas", 9998 , i1.getCantPiezas());
		assertEquals("La pieza no llego a o1", 1 , o1.getCantPiezas());
		assertEquals("La maquina m1 esta ocupada y no deberia estarlo", false , m1.getEstaOcupada());
		assertEquals("La maquina m2 esta ocupada y no deberia estarlo", false , m2.getEstaOcupada());
	}
	
	@Test
	public void testTrayectoria2() { //como no hice nada de concurrencia este
									 // test analiza exactamente lo mismo que el de la
									 //primer trayectoria
		
		
		Sistema s = new Sistema();
		Robot r = new Robot(null, s,null);
		Input i2 = new Input(null, s);
		Maquina m3 = new Maquina(null, s);
		Maquina m4 = new Maquina(null, s);
		Output o2 = new Output(null, s);
		
		r.mover(i2, m3);
		r.mover(m3, m4);
		r.mover(m4, o2);
		
		assertEquals("La maquina m3 se quedo con una o mas piezas", 0 , m3.getCantPiezas());
		assertEquals("La maquina m4 se quedo con una o mas piezas", 0 , m4.getCantPiezas());
		assertEquals("el output 2 tiene la misma cantidad de piezas", 9998 , i2.getCantPiezas());
		assertEquals("La pieza no llego a o2", 1 , o2.getCantPiezas());
		assertEquals("La maquina m3 esta ocupada y no deberia estarlo", false , m3.getEstaOcupada());
		assertEquals("La maquina m4 esta ocupada y no deberia estarlo", false , m4.getEstaOcupada());
	}
	
	@Test
	public void testTrayectoria3() {
		
		Sistema s = new Sistema();
		Robot r = new Robot(null, s,null);
		Input i3 = new Input(null, s);
		Maquina m4 = new Maquina(null, s);
		Maquina m2 = new Maquina(null, s);
		Maquina m3 = new Maquina(null, s);
		Output o3 = new Output(null, s);
		
		r.mover(i3, m2);
		r.mover(i3, m4);
		r.mover(m2, m3);
		r.mover(m4, m3);
		r.mover(m3, o3);
		r.mover(m3, o3);
		
		assertEquals("La maquina m2 se quedo con una o mas piezas", 0 , m2.getCantPiezas());
		assertEquals("La maquina m3 se quedo con una o mas piezas", 0 , m3.getCantPiezas());
		assertEquals("La maquina m4 se quedo con una o mas piezas", 0 , m4.getCantPiezas());
		assertEquals("el output 3 tiene la misma cantidad de piezas", 9997 , i3.getCantPiezas());
		assertEquals("Las piezas no llegaron a o3", 2 , o3.getCantPiezas()); //por ahora llegan 2 piezas a o3
		assertEquals("La maquina m2 esta ocupada y no deberia estarlo", false , m2.getEstaOcupada());
		assertEquals("La maquina m3 esta ocupada y no deberia estarlo", false , m3.getEstaOcupada());
		assertEquals("La maquina m4 esta ocupada y no deberia estarlo", false , m4.getEstaOcupada());
	}

}
